1 #ifndef STAN_MODEL_TEST_GRADIENTS_HPP 2 #define STAN_MODEL_TEST_GRADIENTS_HPP 40 template <
bool propto,
bool jacobian_adjust_transform,
class Model>
42 std::vector<double>& params_r,
43 std::vector<int>& params_i,
49 std::stringstream
msg;
50 std::vector<double>
grad;
51 double lp = log_prob_grad<propto, jacobian_adjust_transform>(
model,
56 if (msg.str().length() > 0) {
58 parameter_writer(msg.str());
61 std::vector<double> grad_fd;
62 finite_diff_grad<false, true, Model>(
model, interrupt, params_r, params_i,
64 if (msg.str().length() > 0) {
66 parameter_writer(msg.str());
71 std::stringstream lp_msg;
72 lp_msg <<
" Log probability=" << lp;
75 parameter_writer(lp_msg.str());
83 header << std::setw(10) <<
"param idx" 84 << std::setw(16) <<
"value" 85 << std::setw(16) <<
"model" 86 << std::setw(16) <<
"finite diff" 87 << std::setw(16) <<
"error";
89 parameter_writer(header.str());
92 for (
size_t k = 0; k < params_r.size(); k++) {
93 std::stringstream
line;
94 line << std::setw(10) << k
95 << std::setw(16) << params_r[k]
96 << std::setw(16) << grad[k]
97 << std::setw(16) << grad_fd[k]
98 << std::setw(16) << (grad[k] - grad_fd[k]);
99 parameter_writer(line.str());
101 if (
std::fabs(grad[k] - grad_fd[k]) > error)
fvar< T > fabs(const fvar< T > &x)
rosenbrock_model_namespace::rosenbrock_model Model
static void grad(vari *vi)
virtual void info(const std::string &message)
int test_gradients(const Model &model, std::vector< double > ¶ms_r, std::vector< int > ¶ms_i, double epsilon, double error, stan::callbacks::interrupt &interrupt, stan::callbacks::logger &logger, stan::callbacks::writer ¶meter_writer)
const XML_Char XML_Content * model