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,
24 info_writer, error_writer);
26 info_writer, error_writer);
28 info_writer, error_writer);
33 Hamiltonian& hamiltonian,
37 std::stringstream msg;
43 msg <<
"Verbose Hamiltonian Evolution, Step Size = " << epsilon <<
":";
44 info_writer(msg.str());
47 msg <<
" " << std::setw(nColumn * width)
49 <<
"" << std::setfill(
' ');
50 info_writer(msg.str());
54 << std::setw(width) << std::left <<
"Poisson"
55 << std::setw(width) << std::left <<
"Initial"
56 << std::setw(width) << std::left <<
"Current"
57 << std::setw(width) << std::left <<
"DeltaH";
58 info_writer(msg.str());
62 << std::setw(width) << std::left <<
"Operator"
63 << std::setw(width) << std::left <<
"Hamiltonian"
64 << std::setw(width) << std::left <<
"Hamiltonian"
65 << std::setw(width) << std::left <<
"/ Stepsize^{2}";
66 info_writer(msg.str());
69 msg <<
" " << std::setw(nColumn * width)
71 <<
"" << std::setfill(
' ');
72 info_writer(msg.str());
74 double H0 = hamiltonian.H(z);
77 info_writer, error_writer);
79 double H1 = hamiltonian.H(z);
83 << std::setw(width) << std::left <<
"hat{V}/2"
84 << std::setw(width) << std::left << H0
85 << std::setw(width) << std::left << H1
86 << std::setw(width) << std::left << (H1 - H0) / (epsilon * epsilon);
87 info_writer(msg.str());
89 update_q(z, hamiltonian, epsilon, info_writer, error_writer);
91 double H2 = hamiltonian.H(z);
95 << std::setw(width) << std::left <<
"hat{T}"
96 << std::setw(width) << std::left << H0
97 << std::setw(width) << std::left << H2
98 << std::setw(width) << std::left << (H2 - H0) / (epsilon * epsilon);
99 info_writer(msg.str());
101 end_update_p(z, hamiltonian, 0.5 * epsilon, info_writer, error_writer);
103 double H3 = hamiltonian.H(z);
107 << std::setw(width) << std::left <<
"hat{V}/2"
108 << std::setw(width) << std::left << H0
109 << std::setw(width) << std::left << H3
110 << std::setw(width) << std::left << (H3 - H0) / (epsilon * epsilon);
111 info_writer(msg.str());
115 << std::setw(nColumn * width)
118 << std::setfill(
' ');
119 info_writer(msg.str());
124 typename Hamiltonian::PointType& z,
125 Hamiltonian& hamiltonian,
double epsilon,
129 void update_q(
typename Hamiltonian::PointType& z,
130 Hamiltonian& hamiltonian,
double epsilon,
135 typename Hamiltonian::PointType& z,
136 Hamiltonian& hamiltonian,
double epsilon,
virtual void update_q(typename Hamiltonian::PointType &z, Hamiltonian &hamiltonian, double epsilon, interface_callbacks::writer::base_writer &info_writer, interface_callbacks::writer::base_writer &error_writer)=0
virtual void begin_update_p(typename Hamiltonian::PointType &z, Hamiltonian &hamiltonian, double epsilon, interface_callbacks::writer::base_writer &info_writer, interface_callbacks::writer::base_writer &error_writer)=0
Probability, optimization and sampling library.
virtual void end_update_p(typename Hamiltonian::PointType &z, Hamiltonian &hamiltonian, double epsilon, interface_callbacks::writer::base_writer &info_writer, interface_callbacks::writer::base_writer &error_writer)=0
base_writer is an abstract base class defining the interface for Stan writer callbacks.
void verbose_evolve(typename Hamiltonian::PointType &z, Hamiltonian &hamiltonian, const double epsilon, interface_callbacks::writer::base_writer &info_writer, interface_callbacks::writer::base_writer &error_writer)
void evolve(typename Hamiltonian::PointType &z, Hamiltonian &hamiltonian, const double epsilon, interface_callbacks::writer::base_writer &info_writer, interface_callbacks::writer::base_writer &error_writer)