28 #ifndef _MRPT_MONTE_CARLO_H_
29 #define _MRPT_MONTE_CARLO_H_
42 namespace mrpt {
namespace math {
58 template<
typename T,
typename NUM,
typename OTHER>
class CMonteCarlo {
63 Eigen::Matrix<NUM,Eigen::Dynamic,1>
data;
66 template<
typename VEC>
inline void setData(
const VEC &v1) {
67 data.assign(v1.begin(),v1.end());
69 template<
typename VEC>
inline void getData(VEC &v1)
const {
72 template<
typename VEC1,
typename VEC2>
inline void getDistribution(VEC1 &vx,VEC2 &vy,
const NUM width=1.0)
const {
75 vx.assign(vvx.begin(),vvx.end());
76 vy.assign(vvy.begin(),vvy.end());
82 hist.getHistogram(vx,vy);
97 if (!
valueGenerator)
throw std::logic_error(
"Value generator function is not set.");
98 std::vector<T> baseData(N);
99 std::vector<NUM> errorData(N);
104 std::transform(baseData.begin(),baseData.end(),errorData.begin(),
errorFun1);
108 std::vector<OTHER> intermediate(N);
109 transform(baseData.begin(),baseData.end(),intermediate.begin(),
intermediateFun);
111 for (
size_t i=0;i<N;++i) errorData[i]=
errorFun2(baseData[i],intermediate[i]);
114 NUM res=accumulate(errorData.begin(),errorData.end(),NUM(0))/errorData.size();