#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 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)); }; struct quasi_gaussian : public var_alea > { quasi_gaussian (int d, double mean = 0, double std =1) : d(d), mean(mean), std(std), sob(d) {}; std::vector operator ()(){ std::vector result = sob(); for(int i=0;i > { 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