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 |