12 :
PolyEstimator(1, N, dt), dim_(dim), sum_ti_(0.0), sum_ti2_(0.0) {
18 sum_tixi_.resize(dim);
19 for (
unsigned int i = 0; i < dim; ++i) {
21 sum_tixi_.at(i) = 0.0;
27 Eigen::MatrixXd Tmat(
N_, 2);
28 Eigen::MatrixXd pinvTmat(2,
N_);
30 for (
unsigned int i = 0; i <
N_; ++i) {
40 pinv0_ =
new double[
N_];
41 pinv1_ =
new double[
N_];
44 c0_.assign(dim_, 0.0);
45 c1_.assign(dim_, 0.0);
48 for (
unsigned int i = 0; i <
N_; ++i) {
49 pinv0_[i] = pinvTmat(0, i);
50 pinv1_[i] = pinvTmat(1, i);
55 double LinEstimator::getEsteeme() {
return coeff_(1); }
58 const std::vector<double>& el,
73 for (
unsigned int i = 0; i < esteem.size(); ++i) {
79 sum_tixi_.at(i) += t * x;
100 double den =
N_ * sum_ti2_ - sum_ti_ * sum_ti_;
104 for (
unsigned int i = 0; i < dim; ++i) {
108 sum_tixi_[i] += t * x;
113 esteem[i] = (
N_ * sum_tixi_[i] - sum_ti_ * sum_xi_[i]) / den;
117 sum_tixi_[i] -= t_old * x;
120 sum_ti2_ -= t_old * t_old;
125 void LinEstimator::fit() {
127 double sum_titi = 0.0;
129 double sum_tixi = 0.0;
131 for (
unsigned int i = 0; i <
N_; ++i) {
133 sum_titi +=
t_[i] *
t_[i];
135 sum_tixi +=
t_[i] *
x_[i];
138 double den =
N_ * sum_titi - sum_ti * sum_ti;
141 coeff_(0) = (sum_xi * sum_titi - sum_ti * sum_tixi) / den;
144 coeff_(1) = (
N_ * sum_tixi - sum_ti * sum_xi) / den;
150 const std::vector<double>& el) {
152 std::cerr <<
"Error: dt cannot be zero" << std::endl;
154 for (
unsigned int i = 0; i < esteem.size(); ++i) esteem[i] = 0.0;
163 if ((
pt_ + 1) <
N_) {
166 for (
unsigned int i = 0; i < esteem.size(); ++i) esteem[i] = el[i];
178 for (
int i = 0; i < dim_; ++i) {
182 for (
unsigned int j = 0; j <
N_; ++j) {
184 if (idx >=
N_) idx -=
N_;
186 c0_[i] += x * pinv0_[j];
187 c1_[i] += x * pinv1_[j];
191 esteem[i] = c1_[i] * tmed_ + c0_[i];
196 std::vector<double>& estimateDerivative,
const unsigned int order) {
199 for (
int i = 0; i < dim_; ++i)
200 estimateDerivative[i] = c1_[i] * tmed_ + c0_[i];
204 for (
int i = 0; i < dim_; ++i) estimateDerivative[i] = c1_[i];
208 for (
int i = 0; i < dim_; ++i) estimateDerivative[i] = 0.0;