9 std::pair<Eigen::VectorXd, Eigen::MatrixXd> KalmanSmoother::Analyze(std::pair<Eigen::VectorXd, Eigen::MatrixXd>
const& currDist_t,
10 std::pair<Eigen::VectorXd, Eigen::MatrixXd>
const& nextDist_t,
11 std::pair<Eigen::VectorXd, Eigen::MatrixXd>
const& nextDist_n,
12 std::shared_ptr<muq::Modeling::LinearOperator> F)
14 std::pair<Eigen::VectorXd, Eigen::MatrixXd> output;
16 Eigen::MatrixXd C = ComputeC(currDist_t.second, nextDist_t.second, F);
18 output.first = currDist_t.first + C*(nextDist_n.first - nextDist_t.first);
19 output.second = currDist_t.second + C*(nextDist_n.second - nextDist_t.second).selfadjointView<Eigen::Lower>()*C.transpose();
26 Eigen::MatrixXd KalmanSmoother::ComputeC(Eigen::MatrixXd
const& currDist_t_cov,
27 Eigen::MatrixXd
const& nextDist_t_cov,
28 std::shared_ptr<muq::Modeling::LinearOperator>
const& F)
30 return nextDist_t_cov.ldlt().solve( F->Apply(currDist_t_cov) ).transpose();