29 #ifndef MULTILATERATION_H 
   30 #define MULTILATERATION_H 
   33 #include <itpp/itexports.h> 
   89   enum Type {MULTI_FAILURE = -1, 
 
   96     algo_(NULL), nb_fails_part(0), nb_fails_pos(0), type_(MULTI_FAILURE), method_(itpp::bvec()), bs_pos_(NULL), nb_bs_(0)
 
  107                   const itpp::mat &bs_pos 
 
  109     algo_(NULL), nb_fails_part(0), nb_fails_pos(0), type_(MULTI_FAILURE), method_(itpp::bvec()), bs_pos_(NULL), nb_bs_(0) {
 
  110     setup(method, bs_pos);
 
  124   void setup(
const itpp::bvec &method, 
 
  125              const itpp::mat &bs_pos 
 
  127     if((
false == set_bs_pos(bs_pos)) || (
false == set_method(method))) {
 
  128       it_error(
"cannot init multilateration");
 
  142   bool get_pos(itpp::vec &ms_pos, 
 
  143                const itpp::vec &measures 
 
  145     return get_pos(ms_pos, measures._data());
 
  152   bool get_pos(itpp::vec &ms_pos, 
 
  153                const itpp::mat &measures 
 
  155     return get_pos(ms_pos, measures._data());
 
  159     return nb_fails_part;
 
  175   double get_crlb(
const vec &ms_pos, 
 
  180   bool get_pos(itpp::vec &ms_pos, 
const double *measures);
 
  182   bool set_method(
const itpp::bvec &method);
 
  184   bool set_bs_pos(
const itpp::mat &bs_pos);
 
  186   bool hybrid2spherical(Point *bs_pos, 
double *meas);
 
  187   bool partition(
unsigned int **subsets_idx, 
unsigned int *subsets_nb, 
const Point *bs_pos, 
unsigned int nb_bs, 
unsigned int subset_len);
 
  189   bool get_ml_pos(Point *ms_pos, 
const Point *bs_pos, 
unsigned int nb_bs, 
const unsigned int *subsets_idx, 
unsigned int subsets_nb, 
unsigned int subset_len);
 
  191   bool get_bs_pos_subset(Point *bs_pos_subset, 
const Point *bs_pos, 
unsigned int nb_bs, 
const unsigned int *subset_idx, 
unsigned int subset_len);
 
  193   bool prod(
double *out, 
const double *AT, 
const unsigned int *d, 
unsigned int cols, 
unsigned int rows);
 
  195   unsigned int nb_fails_part;
 
  196   unsigned int nb_fails_pos;