133 lines
3.3 KiB
C
133 lines
3.3 KiB
C
|
/*****************************************************************************
|
||
|
* rrd_hw_math.h Math functions for Holt-Winters computations
|
||
|
*****************************************************************************/
|
||
|
|
||
|
#include "rrd.h"
|
||
|
#include "rrd_format.h"
|
||
|
|
||
|
/* since /usr/include/bits/mathcalls.h:265 defines gamma already */
|
||
|
#define gamma hw_gamma
|
||
|
|
||
|
/*****************************************************************************
|
||
|
* Functions for additive Holt-Winters
|
||
|
*****************************************************************************/
|
||
|
|
||
|
rrd_value_t hw_additive_calculate_prediction(
|
||
|
rrd_value_t intercept,
|
||
|
rrd_value_t slope,
|
||
|
int null_count,
|
||
|
rrd_value_t seasonal_coef);
|
||
|
|
||
|
rrd_value_t hw_additive_calculate_intercept(
|
||
|
rrd_value_t alpha,
|
||
|
rrd_value_t scratch,
|
||
|
rrd_value_t seasonal_coef,
|
||
|
unival *coefs);
|
||
|
|
||
|
rrd_value_t hw_additive_calculate_seasonality(
|
||
|
rrd_value_t gamma,
|
||
|
rrd_value_t scratch,
|
||
|
rrd_value_t intercept,
|
||
|
rrd_value_t seasonal_coef);
|
||
|
|
||
|
rrd_value_t hw_additive_init_seasonality(
|
||
|
rrd_value_t seasonal_coef,
|
||
|
rrd_value_t intercept);
|
||
|
|
||
|
/*****************************************************************************
|
||
|
* Functions for multiplicative Holt-Winters
|
||
|
*****************************************************************************/
|
||
|
|
||
|
rrd_value_t hw_multiplicative_calculate_prediction(
|
||
|
rrd_value_t intercept,
|
||
|
rrd_value_t slope,
|
||
|
int null_count,
|
||
|
rrd_value_t seasonal_coef);
|
||
|
|
||
|
rrd_value_t hw_multiplicative_calculate_intercept(
|
||
|
rrd_value_t alpha,
|
||
|
rrd_value_t scratch,
|
||
|
rrd_value_t seasonal_coef,
|
||
|
unival *coefs);
|
||
|
|
||
|
rrd_value_t hw_multiplicative_calculate_seasonality(
|
||
|
rrd_value_t gamma,
|
||
|
rrd_value_t scratch,
|
||
|
rrd_value_t intercept,
|
||
|
rrd_value_t seasonal_coef);
|
||
|
|
||
|
rrd_value_t hw_multiplicative_init_seasonality(
|
||
|
rrd_value_t seasonal_coef,
|
||
|
rrd_value_t intercept);
|
||
|
|
||
|
/*****************************************************************************
|
||
|
* Math functions common to additive and multiplicative Holt-Winters
|
||
|
*****************************************************************************/
|
||
|
|
||
|
rrd_value_t hw_calculate_slope(
|
||
|
rrd_value_t beta,
|
||
|
unival *coefs);
|
||
|
|
||
|
rrd_value_t hw_calculate_seasonal_deviation(
|
||
|
rrd_value_t gamma,
|
||
|
rrd_value_t prediction,
|
||
|
rrd_value_t observed,
|
||
|
rrd_value_t last);
|
||
|
|
||
|
rrd_value_t hw_init_seasonal_deviation(
|
||
|
rrd_value_t prediction,
|
||
|
rrd_value_t observed);
|
||
|
|
||
|
|
||
|
/* Function container */
|
||
|
|
||
|
typedef struct hw_functions_t {
|
||
|
rrd_value_t (
|
||
|
*predict) (
|
||
|
rrd_value_t intercept,
|
||
|
rrd_value_t slope,
|
||
|
int null_count,
|
||
|
rrd_value_t seasonal_coef);
|
||
|
|
||
|
rrd_value_t (
|
||
|
*intercept) (
|
||
|
rrd_value_t alpha,
|
||
|
rrd_value_t observed,
|
||
|
rrd_value_t seasonal_coef,
|
||
|
unival *coefs);
|
||
|
|
||
|
rrd_value_t (
|
||
|
*slope) (
|
||
|
rrd_value_t beta,
|
||
|
unival *coefs);
|
||
|
|
||
|
rrd_value_t (
|
||
|
*seasonality) (
|
||
|
rrd_value_t gamma,
|
||
|
rrd_value_t observed,
|
||
|
rrd_value_t intercept,
|
||
|
rrd_value_t seasonal_coef);
|
||
|
|
||
|
rrd_value_t (
|
||
|
*init_seasonality) (
|
||
|
rrd_value_t seasonal_coef,
|
||
|
rrd_value_t intercept);
|
||
|
|
||
|
rrd_value_t (
|
||
|
*seasonal_deviation) (
|
||
|
rrd_value_t gamma,
|
||
|
rrd_value_t prediction,
|
||
|
rrd_value_t observed,
|
||
|
rrd_value_t last);
|
||
|
|
||
|
rrd_value_t (
|
||
|
*init_seasonal_deviation) (
|
||
|
rrd_value_t prediction,
|
||
|
rrd_value_t observed);
|
||
|
|
||
|
rrd_value_t identity;
|
||
|
} hw_functions_t;
|
||
|
|
||
|
|
||
|
#undef gamma
|