| 1 |
greg |
2.1 |
/* RCSid $Id$ */
|
| 2 |
|
|
/*
|
| 3 |
|
|
** Author: Christian Reetz ([email protected])
|
| 4 |
|
|
*/
|
| 5 |
|
|
#ifndef __MUC_RANDVAR_H
|
| 6 |
|
|
#define __MUC_RANDVAR_H
|
| 7 |
|
|
|
| 8 |
|
|
/** \file muc_randvar.h
|
| 9 |
|
|
* \author Ch. Reetz ([email protected])
|
| 10 |
|
|
* \brief representation of a random variables of arbitrary dimension
|
| 11 |
|
|
*/
|
| 12 |
|
|
|
| 13 |
|
|
|
| 14 |
|
|
#ifdef __cplusplus
|
| 15 |
|
|
extern "C" {
|
| 16 |
|
|
#endif
|
| 17 |
|
|
|
| 18 |
|
|
#include "g3flist.h"
|
| 19 |
|
|
|
| 20 |
|
|
/** random variable structure*/
|
| 21 |
|
|
struct muc_rvar {
|
| 22 |
|
|
int n; /* number of samples */
|
| 23 |
|
|
double w; /* sum of weights*/
|
| 24 |
|
|
double* sum; /* sample values sum*/
|
| 25 |
|
|
double* sum_sqr; /* squared sample values sum*/
|
| 26 |
|
|
double* min; /* minimum component value*/
|
| 27 |
|
|
double* max; /* maximum component value*/
|
| 28 |
|
|
g3FList* samples; /* measured samples (if saved)*/
|
| 29 |
|
|
int save_samp; /* if true (default) save samples*/
|
| 30 |
|
|
};
|
| 31 |
|
|
|
| 32 |
|
|
/* returns dimension of random variable*/
|
| 33 |
|
|
#define muc_rvar_get_dim(rv) (g3fl_get_comp_size(rv->samples))
|
| 34 |
|
|
/* returns the number of samples*/
|
| 35 |
|
|
#define muc_rvar_get_sample_size(rv) (rv->n)
|
| 36 |
|
|
|
| 37 |
|
|
/* returns a reference to a sample list element*/
|
| 38 |
|
|
/* Take care to have save_samp flag set*/
|
| 39 |
|
|
#define muc_rvar_get_sample(rv,id) (g3fl_get(rv->samples, id))
|
| 40 |
|
|
|
| 41 |
|
|
|
| 42 |
|
|
int muc_rvar_init(struct muc_rvar* rv);
|
| 43 |
|
|
struct muc_rvar* muc_rvar_create();
|
| 44 |
|
|
void muc_rvar_free(struct muc_rvar* rv);
|
| 45 |
|
|
|
| 46 |
|
|
/* set dimension of random variable (default 1). */
|
| 47 |
|
|
/* random variable needs to be empty (\see muc_rvar_clear)*/
|
| 48 |
|
|
int muc_rvar_set_dim(struct muc_rvar* rv,int dim);
|
| 49 |
|
|
|
| 50 |
|
|
/* set storing samples on (default) or off*/
|
| 51 |
|
|
/* random varianle must be cleared to succeed*/
|
| 52 |
|
|
int muc_rvar_store_sample(struct muc_rvar* rv, int on);
|
| 53 |
|
|
|
| 54 |
|
|
/* clear random variables samples. Don't change dimension.*/
|
| 55 |
|
|
void muc_rvar_clear(struct muc_rvar* rv);
|
| 56 |
|
|
|
| 57 |
|
|
/* Don't store measured sample values, just summed values.*/
|
| 58 |
|
|
/* (Deletes samples if there are already stored some)*/
|
| 59 |
|
|
void muc_rvar_no_samples(struct muc_rvar* rv);
|
| 60 |
|
|
|
| 61 |
|
|
/* adds measured sample to sums (and stores them if \ref save_samp is true)*/
|
| 62 |
|
|
/* The weight of the sample is assumed to be 1.0*/
|
| 63 |
|
|
int muc_rvar_add_sample(struct muc_rvar* rv,double* sample);
|
| 64 |
|
|
|
| 65 |
|
|
/* adds \param w weighted sample to sums */
|
| 66 |
|
|
/* (and stores them if \ref save_samp is true)*/
|
| 67 |
|
|
int muc_rvar_add_weighted_sample(struct muc_rvar* rv,double w,double* samp);
|
| 68 |
|
|
|
| 69 |
|
|
/* returns current expected value in \param ex*/
|
| 70 |
|
|
int muc_rvar_get_ex(struct muc_rvar* rv,double* ex);
|
| 71 |
|
|
|
| 72 |
|
|
/* returns current variance in \param vx*/
|
| 73 |
|
|
int muc_rvar_get_vx(struct muc_rvar* rv,double* vx);
|
| 74 |
|
|
|
| 75 |
|
|
/* returns current bounds*/
|
| 76 |
|
|
/* \param bounds: array with len 2*component_size */
|
| 77 |
|
|
/* \return {min1, max1, min2, max2....}*/
|
| 78 |
|
|
int muc_rvar_get_bounding_box(struct muc_rvar* rv, double* bounds);
|
| 79 |
|
|
|
| 80 |
|
|
/* return sample median (using averaging for even sample numbers)*/
|
| 81 |
|
|
/* \return false if samples are not stored*/
|
| 82 |
|
|
int muc_rvar_get_median(struct muc_rvar* rv, double* median);
|
| 83 |
|
|
|
| 84 |
|
|
int muc_rvar_get_percentile(struct muc_rvar* rv, double* median, double percentile);
|
| 85 |
|
|
|
| 86 |
|
|
#ifdef __cplusplus
|
| 87 |
|
|
}
|
| 88 |
|
|
#endif
|
| 89 |
|
|
#endif
|