aboutsummaryrefslogtreecommitdiffstats
path: root/src/rqmc.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/rqmc.hpp')
-rw-r--r--src/rqmc.hpp25
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;
+ };