diff options
Diffstat (limited to 'gsl-1.9/doc/examples/sum.c')
-rw-r--r-- | gsl-1.9/doc/examples/sum.c | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/gsl-1.9/doc/examples/sum.c b/gsl-1.9/doc/examples/sum.c new file mode 100644 index 0000000..c0237ea --- /dev/null +++ b/gsl-1.9/doc/examples/sum.c @@ -0,0 +1,47 @@ +#include <stdio.h> +#include <gsl/gsl_math.h> +#include <gsl/gsl_sum.h> + +#define N 20 + +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; + + /* terms for zeta(2) = \sum_{n=1}^{\infty} 1/n^2 */ + + for (n = 0; n < N; n++) + { + 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); + + printf ("exact value = % .16f\n", zeta_2); + printf ("accelerated sum = % .16f using %d terms\n", + sum_accel, w->terms_used); + + printf ("estimated error = % .16f\n", err); + printf ("actual error = % .16f\n", + sum_accel - zeta_2); + + gsl_sum_levin_u_free (w); + return 0; +} |