From d2b133901a65244934eb642ec8e20c797efaf650 Mon Sep 17 00:00:00 2001 From: Bertrand Date: Fri, 19 Feb 2016 15:03:51 +0000 Subject: nettoyage du dépôt MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/rqmc.hpp | 127 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 src/rqmc.hpp (limited to 'src/rqmc.hpp') diff --git a/src/rqmc.hpp b/src/rqmc.hpp new file mode 100644 index 0000000..1b33713 --- /dev/null +++ b/src/rqmc.hpp @@ -0,0 +1,127 @@ +#include "low_discrepancy.hpp" +#include +#include +#include "var_alea.hpp" + + +double frac_part(double x); + +//fonctions de compositions de monte_carlo.hpp + +template +struct generator +{ + typedef _Result result_type; +}; + +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()); + }; + private: + Fct f; VA X; +}; + +template +inline compose_t +compose(Fct f, VA X) { + return compose_t(f, X); +}; + +template +struct mean_t: public generator +{ + mean_t(int n, VA X): n(n), X(X) {}; + double operator()(){ + double sum = 0; + for(int i=0; i +inline mean_t +mean(int n, VA X){ + return mean_t(n, X); +}; + + +//Les classes de monte-Carlo + +template +std::vector monte_carlo(int n, L X) +{ + std::vector result(3,0); + double x; + for (int j = 0; j < n; j++) { + x = X(); + result[0] += x; + result[1] += x*x; + } + result[0] /= (double) n; + result[1] = (result[1] - n*result[0]*result[0])/(double)(n-1); + result[2] = 1.96*sqrt(result[1]/(double) n); + return result; +}; + +template +std::vector monte_carlo(int n, Fct f, L X) +{ + return monte_carlo(n, compose(f, X)); +}; + +//Les classes de quasi-mean + +template +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 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