8 #ifndef IMPISD_MULTIVARIATE_FNORMAL_SUFFICIENT_H
9 #define IMPISD_MULTIVARIATE_FNORMAL_SUFFICIENT_H
11 #include <IMP/isd/isd_config.h>
12 #include "internal/timer.h"
18 #include <IMP/algebra/eigen3/Eigen/Dense>
19 #include <IMP/algebra/eigen3/Eigen/Cholesky>
20 #include <IMP/isd/internal/cg_eigen.h>
22 IMPISD_BEGIN_NAMESPACE
25 #define IMP_MVN_TIMER_NFUNCS 11
89 IMP_Eigen::VectorXd FM_, Fbar_, epsilon_, Peps_;
90 double JF_, lJF_, norm_, lnorm_;
91 IMP_Eigen::MatrixXd P_, W_, Sigma_, FX_, PW_;
95 IMP_Eigen::LDLT<IMP_Eigen::MatrixXd, IMP_Eigen::Upper> ldlt_;
97 bool flag_FM_, flag_FX_, flag_Fbar_, flag_W_, flag_Sigma_, flag_epsilon_,
98 flag_PW_, flag_P_, flag_ldlt_, flag_norms_, flag_Peps_;
100 IMP_Eigen::MatrixXd precond_;
101 bool use_cg_, first_PW_, first_PWP_;
106 internal::CallTimer<IMP_MVN_TIMER_NFUNCS> timer_;
118 const IMP_Eigen::VectorXd& FM,
119 const IMP_Eigen::MatrixXd& Sigma,
133 const IMP_Eigen::VectorXd& FM,
int Nobs,
134 const IMP_Eigen::MatrixXd& W,
135 const IMP_Eigen::MatrixXd& Sigma,
139 double density()
const;
142 double evaluate()
const;
145 IMP_Eigen::VectorXd evaluate_derivative_FM()
const;
148 IMP_Eigen::MatrixXd evaluate_derivative_Sigma()
const;
151 double evaluate_derivative_factor()
const;
154 IMP_Eigen::MatrixXd evaluate_second_derivative_FM_FM()
const;
159 IMP_Eigen::MatrixXd evaluate_second_derivative_FM_Sigma(
unsigned l)
const;
162 IMP_Eigen::MatrixXd evaluate_second_derivative_Sigma_Sigma(
unsigned k,
166 void set_FX(
const IMP_Eigen::MatrixXd& f);
167 IMP_Eigen::MatrixXd get_FX()
const;
169 void set_Fbar(
const IMP_Eigen::VectorXd& f);
170 IMP_Eigen::VectorXd get_Fbar()
const;
172 IMP_Eigen::VectorXd get_epsilon()
const;
174 void set_jacobian(
double f);
175 double get_jacobian()
const;
176 void set_minus_log_jacobian(
double f);
177 double get_minus_log_jacobian()
const;
179 void set_FM(
const IMP_Eigen::VectorXd& f);
180 IMP_Eigen::VectorXd get_FM()
const;
182 void set_W(
const IMP_Eigen::MatrixXd& f);
183 IMP_Eigen::MatrixXd get_W()
const;
185 void set_Sigma(
const IMP_Eigen::MatrixXd& f);
186 IMP_Eigen::MatrixXd get_Sigma()
const;
188 void set_factor(
double f);
189 double get_factor()
const;
195 void set_use_cg(
bool use,
double tol);
201 IMP_Eigen::VectorXd get_Sigma_eigenvalues()
const;
204 double get_Sigma_condition_number()
const;
207 IMP_Eigen::MatrixXd solve(IMP_Eigen::MatrixXd B)
const;
210 double get_mean_square_residuals()
const;
216 double get_minus_exponent()
const;
222 double get_minus_log_normalization()
const;
225 double get_log_generalized_variance()
const;
235 IMP_Eigen::MatrixXd get_P()
const;
236 void set_P(
const IMP_Eigen::MatrixXd& P);
239 IMP_Eigen::MatrixXd get_PW()
const;
240 IMP_Eigen::MatrixXd compute_PW_direct()
const;
241 IMP_Eigen::MatrixXd compute_PW_cg()
const;
242 void set_PW(
const IMP_Eigen::MatrixXd& PW);
245 IMP_Eigen::VectorXd get_Peps()
const;
246 void set_Peps(
const IMP_Eigen::VectorXd& Peps);
249 void set_epsilon(
const IMP_Eigen::VectorXd& eps);
253 IMP_Eigen::LDLT<IMP_Eigen::MatrixXd, IMP_Eigen::Upper> get_ldlt()
const;
255 const IMP_Eigen::LDLT<IMP_Eigen::MatrixXd, IMP_Eigen::Upper>& ldlt);
258 void set_norms(
double norm,
double lnorm);
259 std::vector<double> get_norms()
const;
262 double trace_WP()
const;
265 IMP_Eigen::MatrixXd compute_PTP()
const;
268 IMP_Eigen::MatrixXd compute_PWP()
const;
271 void compute_epsilon();
Declare an efficient stl-compatible map.
MultivariateFNormalSufficient.
Various useful constants.
#define IMP_OBJECT_METHODS(Name)
Define the basic things needed by any Object.
Storage of a model, its restraints, constraints and particles.
Various general useful macros for IMP.
Common base class for heavy weight IMP objects.
A shared base class to help in debugging and things.