While looking through this code from mcmc>hmc, I had some questions:
-
What is the difference between T(z)
and V(z)
in terms of their type? Why is this ->
only used for the latter in this code?
-
What is G
and why is dG/dt = 2 T(z) - <q, g> in here?
It seems dG_dt
is used only for NUTS from here.
Thanks!
1 Like
- They’re both member functions but
T
is defined in the same class a few lines earlier while V
is defined on the base class.
Can’t say I really understand how C++ name lookup works but cppreference.com says
Within the body of a non-static member function of X, any id-expression E (e.g. an identifier) that resolves to a non-type non-static member of X or of a base class of X, is transformed to a member access expression (*this).E
(unless it’s already a part of a member access expression). This does not occur in template definition context, so a name may have to be prefixed with this->
explicitly to become dependent.
(Emphasis added) diag_e_metric
is a template so I guess that’s why it can’t find V
.
G
is the virial and it’s used by XHMC (currently not exposed in the interfaces). See this paper for more information about Exhaustive Hamiltonian Monte Carlo.
5 Likes