summaryrefslogtreecommitdiff
path: root/gsl-1.9/doc/examples/sum.c
diff options
context:
space:
mode:
Diffstat (limited to 'gsl-1.9/doc/examples/sum.c')
-rw-r--r--gsl-1.9/doc/examples/sum.c47
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;
+}