21 #ifndef DIFF_ADAPTER_H
22 #define DIFF_ADAPTER_H
49 double get(
const Vec*
x,
size_t i)
const
55 void set(Vec*
x,
size_t i,
double v)
const
61 void set(Vec*
x,
size_t i,
size_t j,
double v,
double w)
const
65 std::cerr <<
"WARNING: setting same dimension to two "
66 <<
"different values."
75 void set(Vec*
x,
const Vec& v)
const;
89 const size_t D = x->size();
91 "cannot set model to vector: dimension must match.");
93 for(
size_t i = 0;
i <
D;
i++)
100 template<
class Model,
class Adapter>
104 aptr.set(&x, i, aptr.get(&x, i) + dv);
108 template<
class Model,
class Adapter>
120 aptr.set(&x, i, j, aptr.get(&x, i) + dv, aptr.get(&x, j) + dw);
124 template<
class Model,
class Vec,
class Adapter>
127 const size_t D = aptr.size(&x);
129 "cannot move model by vector: dimension must match.");
132 for(
size_t i = 0; i <
D; i++)
134 vx[
i] = aptr.get(&x, i) + dx[
i];
143 template<
class M,
class A>
146 const std::vector<std::pair<double, double> >& bounds,
147 const std::vector<double>& widths,
149 std::vector<size_t>& indices,
156 size_t D = bounds.size();
161 indices.resize(
D, 0);
162 for(
size_t d = 0; d <
D; d++)
165 adapter.set(&x, d, bounds[d].first + widths[d]/2);
172 vector<size_t>::reverse_iterator s_p
173 = find_if(indices.rbegin(), indices.rend(),
174 bind2nd(not_equal_to<size_t>(), nbins - 1));
176 if(s_p == indices.rend())
183 fill(indices.rbegin(), s_p, 0);
186 size_t i =
D - 1 - std::distance(indices.rbegin(), s_p);
189 for(
size_t d = i + 1; d <
D; d++)
192 adapter.set(&x, d, bounds[d].first + widths[d]/2);
void move_param(Model &x, size_t i, double dv, const Adapter &aptr)
Helper function that moves a parameter by an amount.
Definition: diff_util.h:102
void set(Vec *x, size_t i, size_t j, double v, double w) const
Sets the ith element of x; i.e., x[i] = v.
Definition: diff_util.h:61
#define IFT(a, ex, msg)
Definition: l_exception.h:101
bool next_point(const std::vector< std::pair< double, double > > &bounds, const std::vector< double > &widths, size_t nbins, std::vector< size_t > &indices, M &x, const A &adapter)
Gets the next point in a N-dimensional grid.
Definition: diff_util.h:145
void move_params(Model &x, size_t i, size_t j, double dv, double dw, const Adapter &aptr)
Helper function that moves a pair of parameters by an amount.
Definition: diff_util.h:111
x
Definition: APPgetLargeConnectedEdges.m:100
Default adapter for the hessian function.
Definition: diff_util.h:42
Object thrown when an argument to a function is not acceptable.
Definition: l_exception.h:377
size_t size(const Vec *x) const
Returns the size of x; i.e., x.size().
Definition: diff_util.h:78
get the indices of edges in each direction for i
Definition: APPgetLargeConnectedEdges.m:48
D
Definition: APPgetLargeConnectedEdges.m:106
Support for error handling exception classes in libKJB.
Vec Model_type
Definition: diff_util.h:45
void set(Vec *x, size_t i, double v) const
Sets the ith element of x; i.e., x[i] = v.
Definition: diff_util.h:55