|
Packit |
67cb25 |
#include <stdio.h>
|
|
Packit |
67cb25 |
#include <stdlib.h>
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
#include <gsl/gsl_math.h>
|
|
Packit |
67cb25 |
#include <gsl/gsl_movstat.h>
|
|
Packit |
67cb25 |
#include <gsl/gsl_rng.h>
|
|
Packit |
67cb25 |
#include <gsl/gsl_randist.h>
|
|
Packit |
67cb25 |
#include <gsl/gsl_vector.h>
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
int
|
|
Packit |
67cb25 |
main(void)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
const size_t N = 500; /* length of time series */
|
|
Packit |
67cb25 |
const size_t K = 11; /* window size */
|
|
Packit |
67cb25 |
gsl_movstat_workspace * w = gsl_movstat_alloc(K);
|
|
Packit |
67cb25 |
gsl_vector *x = gsl_vector_alloc(N);
|
|
Packit |
67cb25 |
gsl_vector *xmean = gsl_vector_alloc(N);
|
|
Packit |
67cb25 |
gsl_vector *xmin = gsl_vector_alloc(N);
|
|
Packit |
67cb25 |
gsl_vector *xmax = gsl_vector_alloc(N);
|
|
Packit |
67cb25 |
gsl_rng *r = gsl_rng_alloc(gsl_rng_default);
|
|
Packit |
67cb25 |
size_t i;
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
for (i = 0; i < N; ++i)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
double xi = cos(2.0 * M_PI * i / (double) N);
|
|
Packit |
67cb25 |
double ei = gsl_ran_gaussian(r, 0.1);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
gsl_vector_set(x, i, xi + ei);
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
/* compute moving statistics */
|
|
Packit |
67cb25 |
gsl_movstat_mean(GSL_MOVSTAT_END_PADVALUE, x, xmean, w);
|
|
Packit |
67cb25 |
gsl_movstat_minmax(GSL_MOVSTAT_END_PADVALUE, x, xmin, xmax, w);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
/* print results */
|
|
Packit |
67cb25 |
for (i = 0; i < N; ++i)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
printf("%zu %f %f %f %f\n",
|
|
Packit |
67cb25 |
i,
|
|
Packit |
67cb25 |
gsl_vector_get(x, i),
|
|
Packit |
67cb25 |
gsl_vector_get(xmean, i),
|
|
Packit |
67cb25 |
gsl_vector_get(xmin, i),
|
|
Packit |
67cb25 |
gsl_vector_get(xmax, i));
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
gsl_vector_free(x);
|
|
Packit |
67cb25 |
gsl_vector_free(xmean);
|
|
Packit |
67cb25 |
gsl_rng_free(r);
|
|
Packit |
67cb25 |
gsl_movstat_free(w);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
return 0;
|
|
Packit |
67cb25 |
}
|