From 8d1cc85eba46cb1e1ebaa4986312562b893734b8 Mon Sep 17 00:00:00 2001 From: Guillaume Horel Date: Thu, 28 Apr 2016 20:49:55 -0400 Subject: try to be more generic --- src/rqmc.hpp | 69 +++++++++++++++--------------------------------------------- 1 file changed, 17 insertions(+), 52 deletions(-) (limited to 'src/rqmc.hpp') diff --git a/src/rqmc.hpp b/src/rqmc.hpp index 840e069..a150447 100644 --- a/src/rqmc.hpp +++ b/src/rqmc.hpp @@ -9,7 +9,7 @@ double frac_part(double x); //fonctions de compositions de monte_carlo.hpp template -struct generator +struct generator { typedef _Result result_type; }; @@ -18,9 +18,12 @@ template struct compose_t : public generator< typename Fct::result_type > { compose_t(Fct f, VA X) : f(f), X(X) {}; - typename Fct::result_type operator()() { - return f(X()); + typename Fct::result_type operator()() { + return f(X()); }; + void reseed() { + X.reseed(); + } private: Fct f; VA X; }; @@ -36,6 +39,7 @@ struct mean_t: public generator { mean_t(int n, VA X): n(n), X(X) {}; double operator()(){ + X.reseed(); double sum = 0; for(int i=0; i private : int n; VA X; }; - + template inline mean_t mean(int n, VA X){ @@ -74,7 +78,7 @@ std::vector monte_carlo(int n, L X, double p=0.05) template std::vector monte_carlo(int n, Fct f, L X, double p=0.05) { - return monte_carlo(n, compose(f, X), p); + return monte_carlo(n, compose(f, X), p); }; //Les classes de quasi-mean @@ -84,8 +88,8 @@ struct quasi_gaussian : public var_alea > { quasi_gaussian (int d, double mean = 0, double std =1) : d(d), mean(mean), std(std), s(d), U(0,1), seed(d) { - for(int i=0; i operator ()(){ std::vector result = s(); for(int i=0;i > } return value = result; } - private: + void reseed() { + for(int i=0; i seed; }; - - - -struct gaussian_d : public var_alea > -{ - gaussian_d(int d, double mean = 0, double std =1) - : d(d), mean(mean), std(std), G(mean, std) {}; - std::vector operator ()(){ - std::vector result(d); - for(int i=0;i -struct quasi_mean : public generator -{ - quasi_mean(int n, int d, Fct f) : n(n), d(d), f(f), G(d) {}; - - typename Fct::result_type operator()() { - double sum =0; - for(int i=0; i G; - }; - - - - - -- cgit v1.2.3-70-g09d2