1 #ifndef STAN_MCMC_HMC_HAMILTONIANS_DENSE_E_METRIC_HPP
2 #define STAN_MCMC_HMC_HAMILTONIANS_DENSE_E_METRIC_HPP
4 #include <stan/math/prim/mat/fun/Eigen.hpp>
5 #include <stan/math/prim/mat/meta/index_type.hpp>
8 #include <boost/random/variate_generator.hpp>
9 #include <boost/random/normal_distribution.hpp>
10 #include <Eigen/Cholesky>
16 template <
class Model,
class BaseRNG>
24 return 0.5 * z.
p.transpose() * z.
mInv * z.
p;
38 return 2 *
T(z) - z.
q.dot(z.
g);
45 return Eigen::VectorXd::Zero(this->
model_.num_params_r());
60 typedef typename stan::math::index_type<Eigen::VectorXd>::type idx_t;
61 boost::variate_generator<BaseRNG&, boost::normal_distribution<> >
62 rand_dense_gaus(rng, boost::normal_distribution<>());
64 Eigen::VectorXd u(z.
p.size());
66 for (idx_t i = 0; i < u.size(); ++i)
67 u(i) = rand_dense_gaus();
69 z.
p = z.
mInv.llt().matrixL().solve(u);
Probability, optimization and sampling library.
double tau(dense_e_point &z)
Eigen::VectorXd dtau_dq(dense_e_point &z, interface_callbacks::writer::base_writer &info_writer, interface_callbacks::writer::base_writer &error_writer)
double phi(dense_e_point &z)
double dG_dt(dense_e_point &z, interface_callbacks::writer::base_writer &info_writer, interface_callbacks::writer::base_writer &error_writer)
Eigen::VectorXd dtau_dp(dense_e_point &z)
base_writer is an abstract base class defining the interface for Stan writer callbacks.
Eigen::VectorXd dphi_dq(dense_e_point &z, interface_callbacks::writer::base_writer &info_writer, interface_callbacks::writer::base_writer &error_writer)
void sample_p(dense_e_point &z, BaseRNG &rng)
double T(dense_e_point &z)
double V(dense_e_point &z)
Point in a phase space with a base Euclidean manifold with dense metric.
dense_e_metric(const Model &model)