1 #ifndef STAN__MCMC__BASE__LEAPFROG__BETA
2 #define STAN__MCMC__BASE__LEAPFROG__BETA
12 template <
typename H,
typename P>
19 void evolve(P& z, H& hamiltonian,
const double epsilon) {
24 hamiltonian.update(z);
38 *(this->
out_stream_) <<
"Verbose Hamiltonian Evolution, Step Size = " << epsilon <<
":" << std::endl;
39 *(this->
out_stream_) <<
" " << std::setw(nColumn * width) << std::setfill(
'-')
40 <<
"" << std::setfill(
' ') << std::endl;
42 << std::setw(width) << std::left <<
"Poisson"
43 << std::setw(width) << std::left <<
"Initial"
44 << std::setw(width) << std::left <<
"Current"
45 << std::setw(width) << std::left <<
"DeltaH"
48 << std::setw(width) << std::left <<
"Operator"
49 << std::setw(width) << std::left <<
"Hamiltonian"
50 << std::setw(width) << std::left <<
"Hamiltonian"
51 << std::setw(width) << std::left <<
"/ Stepsize^{2}"
53 *(this->
out_stream_) <<
" " << std::setw(nColumn * width) << std::setfill(
'-')
54 <<
"" << std::setfill(
' ') << std::endl;
58 double H0 = hamiltonian.H(z);
62 double H1 = hamiltonian.H(z);
67 << std::setw(width) << std::left <<
"hat{V}/2"
68 << std::setw(width) << std::left << H0
69 << std::setw(width) << std::left << H1
70 << std::setw(width) << std::left << (H1 - H0) / (epsilon * epsilon)
76 hamiltonian.update(z);
78 double H2 = hamiltonian.H(z);
83 << std::setw(width) << std::left <<
"hat{T}"
84 << std::setw(width) << std::left << H0
85 << std::setw(width) << std::left << H2
86 << std::setw(width) << std::left << (H2 - H0) / (epsilon * epsilon)
93 double H3 = hamiltonian.H(z);
98 << std::setw(width) << std::left <<
"hat{V}/2"
99 << std::setw(width) << std::left << H0
100 << std::setw(width) << std::left << H3
101 << std::setw(width) << std::left << (H3 - H0) / (epsilon * epsilon)
104 *(this->
out_stream_) <<
" " << std::setw(nColumn * width) << std::setfill(
'-')
105 <<
"" << std::setfill(
' ') << std::endl;
111 virtual void begin_update_p(P& z, H& hamiltonian,
double epsilon) = 0;
112 virtual void update_q(P& z, H& hamiltonian,
double epsilon) = 0;
113 virtual void end_update_p(P& z, H& hamiltonian,
double epsilon) = 0;
void evolve(P &z, H &hamiltonian, const double epsilon)
std::ostream * out_stream_
base_leapfrog(std::ostream *o)
virtual void update_q(P &z, H &hamiltonian, double epsilon)=0
void verbose_evolve(P &z, H &hamiltonian, const double epsilon)
virtual void begin_update_p(P &z, H &hamiltonian, double epsilon)=0
virtual void end_update_p(P &z, H &hamiltonian, double epsilon)=0