33 #ifndef EXOTICA_AICO_SOLVER_INCREMENTAL_GAUSSIAN_H_ 34 #define EXOTICA_AICO_SOLVER_INCREMENTAL_GAUSSIAN_H_ 36 #include <Eigen/Dense> 46 Eigen::VectorXd
T = Eigen::VectorXd(0);
47 Eigen::VectorXd
dX = Eigen::VectorXd(0);
48 Eigen::MatrixXd
S = Eigen::MatrixXd(0, 0);
77 void add(
const Eigen::Ref<const Eigen::VectorXd>& x)
88 double f = 1. / W / (W - 1.);
90 for (
int r = 0;
r <
D; ++
r)
92 for (
int c = 0; c <
D; ++c)
104 void add(
double& W_,
const Eigen::Ref<const Eigen::VectorXd>& T_,
105 const Eigen::Ref<const Eigen::VectorXd>& S_)
114 dX = T_ / W_ - T /
W;
116 double f = W * W_ / (W + W_);
117 for (
int r = 0;
r <
D; ++
r)
119 for (
int c = 0; c <
D; ++c)
121 S(
r, c) += S_(
r, c) + f *
dX(
r) *
dX(c);
128 inline void addw(
double w,
const Eigen::Ref<const Eigen::VectorXd>& x)
140 double f = W * w / (W + w);
141 for (
int r = 0;
r <
D; ++
r)
143 for (
int c = 0; c <
D; ++c)
157 void cov(Eigen::MatrixXd& sig)
161 void covp(Eigen::MatrixXd& sig)
168 #endif // EXOTICA_AICO_SOLVER_INCREMENTAL_GAUSSIAN_H_ SinglePassMeanCovariance()=default
void covp(Eigen::MatrixXd &sig)
void mean(Eigen::VectorXd &mu)
void add(double &W_, const Eigen::Ref< const Eigen::VectorXd > &T_, const Eigen::Ref< const Eigen::VectorXd > &S_)
void cov(Eigen::MatrixXd &sig)
void add(const Eigen::Ref< const Eigen::VectorXd > &x)
void addw(double w, const Eigen::Ref< const Eigen::VectorXd > &x)
SinglePassMeanCovariance(int D_)
void add(SinglePassMeanCovariance &M)