1 #ifndef STAN_MCMC_HMC_INTEGRATORS_BASE_LEAPFROG_HPP 2 #define STAN_MCMC_HMC_INTEGRATORS_BASE_LEAPFROG_HPP 12 template <
class Hamiltonian>
18 void evolve(
typename Hamiltonian::PointType&
z,
19 Hamiltonian& hamiltonian,
32 Hamiltonian& hamiltonian,
35 std::stringstream
msg;
41 msg <<
"Verbose Hamiltonian Evolution, Step Size = " << epsilon <<
":";
45 msg <<
" " << std::setw(nColumn * width)
47 <<
"" << std::setfill(
' ');
52 << std::setw(width) <<
std::left <<
"Poisson" 53 << std::setw(width) <<
std::left <<
"Initial" 54 << std::setw(width) <<
std::left <<
"Current" 55 << std::setw(width) <<
std::left <<
"DeltaH";
60 << std::setw(width) << std::left <<
"Operator" 61 << std::setw(width) << std::left <<
"Hamiltonian" 62 << std::setw(width) << std::left <<
"Hamiltonian" 63 << std::setw(width) << std::left <<
"/ Stepsize^{2}";
67 msg <<
" " << std::setw(nColumn * width)
69 <<
"" << std::setfill(
' ');
72 double H0 = hamiltonian.H(z);
77 double H1 = hamiltonian.H(z);
81 << std::setw(width) << std::left <<
"hat{V}/2" 82 << std::setw(width) << std::left << H0
83 << std::setw(width) << std::left << H1
84 << std::setw(width) << std::left << (H1 - H0) / (epsilon * epsilon);
87 update_q(z, hamiltonian, epsilon, logger);
89 double H2 = hamiltonian.H(z);
93 << std::setw(width) << std::left <<
"hat{T}" 94 << std::setw(width) << std::left << H0
95 << std::setw(width) << std::left << H2
96 << std::setw(width) << std::left << (H2 - H0) / (epsilon * epsilon);
101 double H3 = hamiltonian.H(z);
105 << std::setw(width) << std::left <<
"hat{V}/2" 106 << std::setw(width) << std::left << H0
107 << std::setw(width) << std::left << H3
108 << std::setw(width) << std::left << (H3 - H0) / (epsilon * epsilon);
113 << std::setw(nColumn * width)
116 << std::setfill(
' ');
122 Hamiltonian& hamiltonian,
double epsilon,
126 void update_q(
typename Hamiltonian::PointType& z,
127 Hamiltonian& hamiltonian,
double epsilon,
131 Hamiltonian& hamiltonian,
double epsilon,
#define H1(NAME, LABEL, N, X1, X2)
void verbose_evolve(typename Hamiltonian::PointType &z, Hamiltonian &hamiltonian, const double epsilon, callbacks::logger &logger)
virtual void update_q(typename Hamiltonian::PointType &z, Hamiltonian &hamiltonian, double epsilon, callbacks::logger &logger)=0
#define H2(NAME, LABEL, NX, X1, X2, NY, Y1, Y2)
virtual void begin_update_p(typename Hamiltonian::PointType &z, Hamiltonian &hamiltonian, double epsilon, callbacks::logger &logger)=0
virtual void end_update_p(typename Hamiltonian::PointType &z, Hamiltonian &hamiltonian, double epsilon, callbacks::logger &logger)=0
virtual void info(const std::string &message)
constexpr auto const & left(const_AssnsIter< L, R, D, Dir > const &a, const_AssnsIter< L, R, D, Dir > const &b)
void evolve(typename Hamiltonian::PointType &z, Hamiltonian &hamiltonian, const double epsilon, callbacks::logger &logger)