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 |