diff options
Diffstat (limited to 'src/rqmc.hpp')
| -rw-r--r-- | src/rqmc.hpp | 25 |
1 files changed, 22 insertions, 3 deletions
diff --git a/src/rqmc.hpp b/src/rqmc.hpp index 03f7e81..840e069 100644 --- a/src/rqmc.hpp +++ b/src/rqmc.hpp @@ -56,7 +56,7 @@ mean(int n, VA X){ //Les classes de monte-Carlo template <typename L> -std::vector<double> quasi_mean(int n, L X, double p=0.05) +std::vector<double> monte_carlo(int n, L X, double p=0.05) { std::vector<double> result(3,0); double x; @@ -72,9 +72,9 @@ std::vector<double> quasi_mean(int n, L X, double p=0.05) }; template <typename L, typename Fct> -std::vector<double> quasi_mean(int n, Fct f, L X, double p=0.05) +std::vector<double> monte_carlo(int n, Fct f, L X, double p=0.05) { - return quasi_mean(n, compose(f, X), p); + return monte_carlo(n, compose(f, X), p); }; //Les classes de quasi-mean @@ -120,6 +120,25 @@ struct gaussian_d : public var_alea<std::vector<double> > gaussian G; }; +template <typename Fct, typename LDS> +struct quasi_mean : public generator<typename Fct::result_type> +{ + 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<n; i++){ + sum += f(G()); + + } + return sum/n; + }; + + private: + int n, d; + Fct f; + quasi_gaussian<LDS> G; + }; |
