20 #ifndef SAMPLE_VECTOR_H_INCLUDED
21 #define SAMPLE_VECTOR_H_INCLUDED
27 #include <wrap_lapack/wrap_lapack.h>
64 get_vector_model_parameter<Model>);
85 template<
typename Model>
110 move_vector_model_parameter<Model>,
112 get_vector_model_dimension<Model>
127 template<
typename Model,
bool CONSTRAIN_TARGET = false,
bool INCLUDE_ACCEPT_STEP = true,
bool REVERSIBLE = true>
157 int num_dynamics_steps,
165 move_vector_model_parameter<Model>,
167 get_vector_model_dimension<Model>,
174 int num_dynamics_steps,
184 move_vector_model_parameter<Model>,
186 get_vector_model_dimension<Model>,
187 get_vector_model_parameter<Model>,
207 template<
class Model,
bool REVERSIBLE = true>
213 template<
typename SimpleVector>
221 scale_(covariance.
size())
223 std::transform(covariance.
begin(), covariance.
end(), scale_.
begin(),
static_cast<double(*)(
double)
>(sqrt));
229 if(m.size() != scale_.
size())
235 for(
size_t i = 0;
i < mp.size(); ++
i)
250 template<
typename VectorModel>
283 std::generate(delta.
begin(), delta.
end(), boost::bind(Self::gauss_sample_));
285 delta = sqrt_t_ * exp(log_lambda_/2.0) * chol_cov_ * delta;
292 std::plus<double>());
307 kjb::Matrix result = sqrt_t_ * exp(log_lambda_/2.0) * chol_cov_;
317 return sqrt(exp(log_lambda_));
332 template <
class VectorType>
380 #ifdef KJB_HAVE_LAPACK
381 int N = delta.size();
383 std::copy(delta.begin(), delta.end(), &tmp(0,0));
384 lapack_solve_triangular(
392 for(
size_t i = 0;
i < N; ++
i)
395 lower_triangular_product_(C, tmp, tmp);
414 size_t N = delta.size();
418 for(
size_t k = 0;
k < N; ++
k)
420 double& C_k = C(
k,
k);
421 const double x_k = x[
k];
423 double r = sqrt(C_k*C_k+x_k * x_k);
427 for(
size_t k2 =
k+1; k2 < N; ++k2)
429 C(k2,
k) = (C(k2,
k) + s*x[k2])/c;
430 x[k2] = c*x[k2] - s*C(k2,
k);
463 void lower_triangular_product_(
471 for(
size_t r = 0;
r < N; ++
r)
472 for(
size_t c = 0; c <=
r; ++c)
473 for(
size_t i = c;
i <=
r; ++
i)
474 tmp(
r,c) += op1(
r,
i)*op2(
i,c);
492 template<
typename VectorModel>
virtual ~Vector_hmc_step()
Definition: sample_vector.h:193
Mv_gaussian_proposer< VectorModel > & get_proposer_()
Definition: sample_step.h:349
Parent::Get_lower_bounds Get_lower_bounds
Definition: sample_step.h:1076
Parent::Get_lower_bounds Get_lower_bounds
Definition: sample_vector.h:136
Matrix cholesky_decomposition(const Matrix &M)
Definition: n_cholesky.h:35
void rank_1_update(kjb::Matrix &C, const VectorModel &delta, double gamma)
Definition: sample_vector.h:378
Basic_hmc_step< Model, CONSTRAIN_TARGET, INCLUDE_ACCEPT_STEP, REVERSIBLE > Parent
Definition: sample_vector.h:131
Definition: sample_vector.h:208
Definition for the Matrix class, a thin wrapper on the KJB Matrix struct and its related functionalit...
Basic_mh_step< VectorModel, Mv_gaussian_proposer< VectorModel > > Base
Definition: sample_vector.h:496
size_type size() const
Alias to get_length(). Required to comply with stl Container concept.
Definition: m_vector.h:510
kjb::Matrix get_covariance() const
Definition: sample_vector.h:305
void adapt_covariance(const VectorType &delta, double gamma)
Definition: sample_vector.h:333
Definition of various standard probability distributions.
const kjb::Matrix & get_unscaled_cholesky_covariance() const
Definition: sample_vector.h:300
Mh_proposal_result operator()(const VectorModel &m, VectorModel &mp) const
Propose a new value.
Definition: sample_vector.h:273
Indicates the result of an MH proposal. It is simply a pair of probabilities, forward and backward...
Definition: sample_base.h:334
Base::Proposer Proposer
Definition: sample_vector.h:500
Object thrown when an argument is of the wrong size or dimensions.
Definition: l_exception.h:426
Definition: sample_vector.h:251
Definition: sample_concept.h:73
int get_num_rows() const
Return the number of rows in the matrix.
Definition: m_matrix.h:543
Impl_type *& get_underlying_representation_with_guilt()
Get pointer to the underlying kjb_c::Matrix C struct.
Definition: m_matrix.h:591
Model_parameter_evaluator< Model >::Type Get_upper_bounds
Definition: sample_step.h:584
Parent::Get_upper_bounds Get_upper_bounds
Definition: sample_step.h:1077
void set_temperature(double t)
Definition: sample_vector.h:267
Parent::Get_step_size Get_step_size
Definition: sample_vector.h:135
Int_matrix::Value_type max_abs_difference(const Int_matrix &op1, const Int_matrix &op2)
Find the largest difference between two matrices.
Definition: l_int_matrix.h:1364
Model_parameter_evaluator< Model >::Type Get_step_size
Definition: sample_step.h:578
Parent::Target_distribution Target_distribution
Definition: sample_vector.h:133
Definition: sample_step.h:1062
virtual ~Vector_srw_step()
Definition: sample_vector.h:549
for k
Definition: APPgetLargeConnectedEdges.m:61
Definition: sample_vector.h:493
Vector_numerical_gradient(const Target_distribution &log_target, const Get_neighborhood &get_neighborhood)
Construct this functor.
Definition: sample_vector.h:103
r
Definition: APPgetLargeConnectedEdges.m:127
Definition: sample_step.h:219
#define KJB_THROW(ex)
Definition: l_exception.h:46
Vector_srw_step Self
Definition: sample_vector.h:497
Matrix outer_product(const Vector &v1, const Vector &v2)
Definition: m_matrix.h:2293
This class implements vectors, in the linear-algebra sense, with real-valued elements.
Definition: m_vector.h:87
Vector sample(const MV_gaussian_distribution &dist)
Sample from a multivariate normal distribution.
Definition: prob_sample.cpp:42
double get_vector_model_parameter(const Model &m, int i)
Parameter getter for anything that implements operator[].
Definition: sample_vector.h:38
Definition: sample_vector.h:128
Base::Target_distribution Target_distribution
Definition: sample_vector.h:499
Definition: sample_vector.h:214
Parent::Gradient Gradient
Definition: sample_vector.h:134
Parent::Get_step_size Get_step_size
Definition: sample_step.h:1071
int get_num_cols() const
Return the number of columns in the matrix.
Definition: m_matrix.h:554
iterator end()
Definition: m_vector.h:557
Model_parameter_evaluator< Model >::Type Get_neighborhood
Definition: sample_default.h:104
iterator begin()
Definition: m_vector.h:537
Default move function; uses '+'.
Definition: sample_default.h:37
x
Definition: APPgetLargeConnectedEdges.m:100
Model_evaluator< Model >::Type Target_distribution
Definition: sample_default.h:102
const Gaussian_distribution STD_NORMAL
Definition: prob_distribution.cpp:12
void move_vector_model_parameter(Model &m, int i, double x)
Parameter mover for anything that implements operator[] and whose elements are double.
Definition: sample_vector.h:61
void set_vector_model_parameter(Model &m, int i, double x)
Parameter setter for anything that implements operator[].
Definition: sample_vector.h:49
#define KJB_THROW_2(ex, msg)
Definition: l_exception.h:48
int get_vector_model_dimension(const Model &m)
Dimension for any model that implements the size() member function.
Definition: sample_vector.h:75
Model_evaluator< Model >::Type Target_distribution
Definition: sample_step.h:575
Matrix transpose() const
Transpose this matrix.
Definition: m_matrix.cpp:395
void rank_1_update_2(kjb::Matrix &C, const VectorModel &delta, double gamma)
Definition: sample_vector.h:406
Numerical_gradient< Model > Parent
Definition: sample_vector.h:89
Parent::Gradient Gradient
Definition: sample_step.h:1069
Mv_gaussian_proposer(const kjb::Matrix &covariance)
Construct a Mv_gaussian_proposer.
Definition: sample_vector.h:261
Vector_hmc_step< Model, false, REVERSIBLE > Type
Definition: sample_vector.h:210
Parent::Target_distribution Target_distribution
Definition: sample_step.h:1068
Parent::Target_distribution Target_distribution
Definition: sample_step.h:224
const Impl_type * get_c_matrix() const
Get const pointer to the underlying kjb_c::Matrix C struct.
Definition: m_matrix.h:601
Parent::Get_upper_bounds Get_upper_bounds
Definition: sample_vector.h:137
get the indices of edges in each direction for i
Definition: APPgetLargeConnectedEdges.m:48
void rank_1_update_ref(kjb::Matrix &C, const VectorModel &delta, double gamma)
Definition: sample_vector.h:439
void adapt_global_scale(double x)
Definition: sample_vector.h:370
This class implements matrices, in the linear-algebra sense, with real-valued elements.
Definition: m_matrix.h:94
Vector_hmc_step(const Target_distribution &log_target, int num_dynamics_steps, const Gradient &gradient, const Get_step_size &get_step_size, double alpha=0.0)
Creates a Vector_hmc_step.
Definition: sample_vector.h:155
for m
Definition: APPgetLargeConnectedEdges.m:64
double get_global_scale() const
Definition: sample_vector.h:315
Object thrown when a program lacks required resources or libraries.
Definition: l_exception.h:539
void swap(Matrix &other)
Swap the representations of two matrices.
Definition: m_matrix.h:532
Parent::Target_distribution Target_distribution
Definition: sample_vector.h:91
void set_covariance(const kjb::Vector &covariance)
Definition: sample_vector.h:543
void set_covariance(const kjb::Matrix &covariance)
Definition: sample_vector.h:537
Model_parameter_evaluator< Model >::Type Gradient
Definition: sample_step.h:576
Parent::Get_neighborhood Get_neighborhood
Definition: sample_vector.h:92
Model_parameter_evaluator< Model >::Type Get_lower_bounds
Definition: sample_step.h:583
Vector_srw_step(const Target_distribution &target, const kjb::Matrix &covariance)
Creates a Vector_srw_step.
Definition: sample_vector.h:510
Approximates the gradient of a target distribution, evaluated at a certain location. The model in question must be a vector model.
Definition: sample_vector.h:86
Approximates the gradient and/or curvature of a target distribution, evaluated at a certain location...
Definition: sample_default.h:99